public class test1 {
    // 自定义数组转字符串方法（避免使用 Arrays.toString）
    private static String arrayToString(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
            if (i < arr.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }

    public static void main(String[] args) throws InterruptedException {
        // 原始数组
        int[] array = {5, 3, 8, 1, 2, 7, 4, 6};

        // 创建升序线程，通过匿名内部类重写 run 方法
        Thread ascendingThread = new Thread() {
            @Override
            public void run() {
                int[] arr = array.clone();  // 复制数组，避免线程间数据干扰
                // 冒泡排序（升序）
                for (int i = 0; i < arr.length - 1; i++) {
                    for (int j = 0; j < arr.length - 1 - i; j++) {
                        if (arr[j] > arr[j + 1]) {
                            // 交换元素
                            int temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                    }
                }
                System.out.println("升序排序结果：" + arrayToString(arr));
            }
        };

        // 创建降序线程，通过匿名内部类重写 run 方法
        Thread descendingThread = new Thread() {
            @Override
            public void run() {
                int[] arr = array.clone();  // 复制数组，避免线程间数据干扰
                // 冒泡排序（降序）
                for (int i = 0; i < arr.length - 1; i++) {
                    for (int j = 0; j < arr.length - 1 - i; j++) {
                        if (arr[j] < arr[j + 1]) {
                            // 交换元素
                            int temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                    }
                }
                System.out.println("降序排序结果：" + arrayToString(arr));
            }
        };

        // 启动线程
        ascendingThread.start();
        descendingThread.start();

        // 等待线程执行完毕，再继续执行主线程后续逻辑
        ascendingThread.join();
        descendingThread.join();

        System.out.println("主线程结束");
    }
}